<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Symbol</title>
</head>
<body>
  <!-- 
    Symbol特点
      1. Symbol的值是唯一的，用来解决命名冲突的问题
      2. Symbol值不能与其他数据进行运算
      3. Symbol定义的对象属性不能使用 for ... in循环遍历，但是可以使用Reflect.ownKeys来获取对象的所有键名
  -->

    <script>
      // 创建Symbol
      let s = Symbol();
      console.log(s, typeof s);

      let s2 = Symbol('尚硅谷');
      let s3 = Symbol('尚硅谷');

      console.log(s2, s3, s2 === s3);   // Symbol(尚硅谷) Symbol(尚硅谷) false

      // Symbol.for 创建全局的符号
      let s4 = Symbol.for('尚硅谷');
      let s5 = Symbol.for('尚硅谷');
      console.log(s4, typeof s4);
      console.log(s5, typeof s5);
      console.log(s4 === s5);           // true

      // 不能与其他数据进行运算
      // let result = s + 100;              // Uncaught TypeError: Cannot convert a Symbol value to a number
      // let result = s > 100;              // Uncaught TypeError: Cannot convert a Symbol value to a number
      // let result = s + '100';            // Uncaught TypeError: Cannot convert a Symbol value to a number
      // let result = s + s;                // Uncaught TypeError: Cannot convert a Symbol value to a number

      // USONB    you are so niubility
      // u        undefined
      // s        String Symbol
      // o        Object
      // n        null Number
      // b        Boolean
      
      var sym1 = Symbol.for("name")
      var sym2 = Symbol.for("name")
      // 获取全局符号对应的键名
      console.log(Symbol.keyFor(sym1))
      console.log(Symbol.keyFor(sym2))

    </script>
</body>
</html>